import Serializer=require('./../../base/Serializer');
import ChartAxisStyle=require('./item/ChartAxisStyle');
import FontStyle=require('./item/FontStyle');
import LineStyle=require('./item/LineStyle');
import ObjPosition=require('../../base/ObjPosition');
import ChartApperanceLine=require('./ChartApperanceLine');
import GCJ_CLASS_TYPE=require('./../../../common/GCJ_CLASS_TYPE');


export = ChartApperanceBar;

/**
 * 柱状图的外观属性
 * @author 
 *
 */
class ChartApperanceBar extends ChartApperanceLine{
    /**
     * 柱状图的方向，0向上／1向右
     */ 
    public direction: number=0;
    /**
     * 柱状图的宽度,按百分比 ［0 ~ 1.0］
     * 宽度计算公式：
     *      1)  每个柱子区域的宽度为B，总宽度为W，x轴数据的个数为C，则： B＝W/C
     *      2)  每个柱子的宽度假设为 S，柱子的个数为 T，  条距为gap，条组距为group_gap，则：
     *              当T==1时：
     *                  B = S(T+group_gap);    
     *              当T>1时
     *                  B = S(T+gap+group_gap);
     */
    public gap: number=0.1; // 条距，注意：当仅有多组数据时有效
    public group_gap: number=0.4; // 条组距,注意：开始和结束处各一半
    
    public constructor(g?) {
        super(g);
        
        this.ct=GCJ_CLASS_TYPE.CLASS_TYPE_ChartApperanceBar;
    }
    // 初始化数据
    public initData() {
        super.initData();

        this.x.v=1;
        this.x.axis.v=1;
        this.x.axis.w=2;
        this.x.axis_assist.v=1;
        this.x.axis_assist.w=1;

        this.y.v=1;
        this.y.axis.v=0;
        this.y.axis.w=2;
        this.y.axis_assist.v=0;
        this.y.axis_assist.w=1;
        
        this.gap=0;
        this.group_gap=0.4;
    }
    // 计算第i根柱子的位置和宽度
    // 参数：W，总宽度
    // 参数：C，x轴数据的个数
    // 参数：T，柱子的个数
    // 参数：index，柱子的index
    public calcBars(W:number, C:number,T:number,index:number=0):Array<ObjPosition>{
        if(W<0||C<1||T<1) return null; 
        
        var ret: Array<ObjPosition>=[];
        // 每个柱子区域的宽度为B
        var B=W/C;
        // 每个柱子的宽度假设为 S
        var S=B/2;
        if(T==1) {
            S=B/(T+this.group_gap);
        } else { 
            S=B/(T+(T-1)*this.gap+this.group_gap);
        }
        
        for(var i = 0; i < C; i++) {
            var group_start=i*B;
            var bar_start=group_start+S*this.group_gap/2+index*S*(1+this.gap)
            
            ret.push(new ObjPosition(bar_start,0,S,0,0))
        }
        
        return ret;
    }
    
    // 从json对象(注意不是json字符串)中解析
    // 参数：self,true表示只拷贝自身数据，而不拷贝子的数据
    public fromJson(jsonObj,versionId,self?) {
        super.fromJson(jsonObj,versionId,self);

        this.direction=jsonObj.direction;
        this.gap=jsonObj.gap;
        this.group_gap=jsonObj.group_gap;
    }
    // 转成json字符串
    public toJson(): string {
        // 去掉父json字符串的头尾
        var superJson=super.toJson();
        superJson=superJson.substr(1,superJson.length-2);

        var ret='{';
        ret+=superJson;
        
        // direction
        ret+=',';
        ret+='"direction":';
        ret+=this.direction;
        
        // gap
        ret+=',';
        ret+='"gap":';
        ret+=this.gap;
        
        // group_gap
        ret+=',';
        ret+='"group_gap":';
        ret+=this.group_gap;       

        ret+='}';
        return ret;
    }
    
//SJG_MARK_APPEND--------------------
}//SJG_MARK_END-------------------------